# -*- coding:utf-8 -*-
# @FileName : app\api\v1\models\schemas.py
# @Time     : 2025/11/28
# @Author   : 天空之城
"""模型API模块数据模式文件

此模块使用Marshmallow定义模型调用请求和响应的数据验证和序列化模式。
"""
from marshmallow import Schema, fields, validate
from typing import List, Dict, Any


class ToolSchema(Schema):
    """工具数据模式
    
    用于验证和序列化工具定义数据。
    """
    type = fields.Str(required=True, validate=validate.OneOf(['function']))
    function = fields.Dict(required=True)


class MessageSchema(Schema):
    """消息数据模式
    
    用于验证和序列化对话消息数据。
    """
    role = fields.Str(required=True, validate=validate.OneOf(['system', 'user', 'assistant', 'tool']))
    content = fields.Str(required=True)
    name = fields.Str()
    tool_calls = fields.List(fields.Dict())
    tool_call_id = fields.Str()


class ModelRequestSchema(Schema):
    """模型调用请求数据模式
    
    用于验证模型调用请求的数据结构和规则。
    """
    model_type = fields.Str(required=True, validate=validate.OneOf(['deepseek', 'moda', 'yuanjing']))
    messages = fields.List(fields.Nested(MessageSchema), required=True, validate=validate.Length(min=1))
    tools = fields.List(fields.Nested(ToolSchema))
    tool_choice = fields.Str(validate=validate.OneOf(['auto', 'none']))
    temperature = fields.Float(validate=validate.Range(min=0, max=1))


class ModelResponseSchema(Schema):
    """模型调用响应数据模式
    
    用于序列化模型调用响应的数据结构。
    """
    id = fields.Str()
    object = fields.Str()
    created = fields.Int()
    model = fields.Str()
    choices = fields.List(fields.Dict())
    usage = fields.Dict()


class ModelListResponseSchema(Schema):
    """支持的模型列表响应数据模式
    
    用于序列化支持的模型列表数据。
    """
    models = fields.List(fields.Str())